---
sidebar_position: 2
---

# Для программ на C++

Массивы и функции передаются в функцию через указатели:

- Имя массива является указателем на его нулевой элемент. Указатель "ничего не знает" о длине массива и длина массива должна передаваться в функцию как параметр.
- Имя функции указывает на первую команду кода функции.

## Передача одномерных массивов в функцию

```cpp
#include <iostream>

using namespace std;

// В функцию передаются
// указатель на начало массива
//  (имя массива a) и его размерность(n)
int sum(const int *a, int n) {
    int i, s = 0;
    int k = sizeof(a);              // k – размер указателя (4 байта)
    cout << "k=" << k << endl;
    for (i = 0; i < n; i++)
        s += a[i];
    return s;
}


int main() {
    setlocale(LC_ALL, "Russian");
    int n;
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8};

    // Определение размерности инициализированного массива
    n = sizeof(a) / sizeof(int);
    cout << "n=" << n << endl;
    cout << sum(a, n) << "\n";
    return 0;

}
```

## Передача имен функций в качестве параметров

```cpp
#include <iostream>

using namespace std;

/* для удобочитаемости программы определяется новый тип
(тип пользователя) PF - указатель на функцию, которая имеет
один параметр типа int и не возвращает никакого значения*/
typedef void (*PF)(int);

// Определение функции f1
// функция получает в качестве параметра
// указатель типа PF
void f1(PF pf) {
    pf(5);          //вызов функции через указатель
}

void f(int i) { cout << i << endl; }

int main() {
    setlocale(LC_ALL, "Russian");
    f1(f);      //Функция выведет на экран число 5
    return 0;
}
```
